

package com.hazelcast.query;

import com.hazelcast.internal.serialization.BinaryInterface;

/**
 * This interface provides functionality to build a predicate.
 */
@BinaryInterface
public interface PredicateBuilder extends Predicate {

    String getAttribute();

    void setAttribute(String attribute);

    EntryObject getEntryObject();

    PredicateBuilder and(Predicate predicate);

    PredicateBuilder or(Predicate predicate);

    /**
     * This interface provides entry-level functionality related to building a predicate.
     */
    interface EntryObject {
        EntryObject get(String attribute);

        EntryObject key();

        PredicateBuilder is(String attribute);

        PredicateBuilder isNot(String attribute);

        PredicateBuilder equal(Comparable value);

        PredicateBuilder notEqual(Comparable value);

        PredicateBuilder isNull();

        PredicateBuilder isNotNull();

        PredicateBuilder greaterThan(Comparable value);

        PredicateBuilder greaterEqual(Comparable value);

        PredicateBuilder lessThan(Comparable value);

        PredicateBuilder lessEqual(Comparable value);

        PredicateBuilder between(Comparable from, Comparable to);

        PredicateBuilder in(Comparable... values);
    }

}
